Web 未来技术猜想(一)

发布于 · 最后修改时间 · 标签: html&css cogitation

对于近十年来 Web 技术的高速发展,很有多精彩的概念与设计涌现出来,但也有很多设计是建立在历史 Web 技术的架构上。

这间接地导致了浏览器的开发越来越难,现在还存活的浏览器内核也就只剩下 Webkit 和 Blink 了(Firefix 的 Servo 份额实在太小了,开发进度也实在缓慢)……

即便这两个内核的代码都是开源的,但并不意味着“不垄断”,Web 技术再这样发展下去,只会制造出越来越高的技术壁垒。因为开源并不意味着自由,技术标准的话语权还是掌握在别人手里,你想贡献代码,还得看社区是否“有时间”去接纳,还得有大量的条条框框在限制着你,而反观 Chrome 团队,它们则是能肆无忌惮地往 Chrome 中添加各种实验性功能。从技术层面上来说,技术人的贡献固然是令人尊敬值得肯定,但从资本的层面上来说,这些新技术的堆在这般的堆砌,制造技术壁垒、掌握标准话语权,不正是垄断牟利的老套路吗?

我这里大胆预测一下,未来 Web 技术一定带来突变。
或者说这不是预测,是我个人假设要去从头设计一个浏览器,我应该怎么去做。宏观上会分成两大种类的模块来开发:

第一种是功能性模块

比如蓝牙模块、HTTP1/2/3 协议模块、USB 模块、摄像头模块等等。对此可以理解成“驱动模块”,但不同的是,驱动模块目的只是将硬件被操作系统的接口所认知,功能性模块还加入了隐私保护的概念,所有的行为对于使用者来说必须是公开透明的。这不是单纯做好“功能授权”与“信息流向透明”就能解决的问题,还是确保用户的身份不被追踪,用户的偏好不被预测等等。
这类模块由两部分组成:一部分是“原子接口”,一部分是“应用接口”。

  1. 其中“原子接口”只能由操作系统提供,类似于操作系统的 API,但是要符合上文所提到的 Web 的隐私安全性的定义。

    Web 开发者可以直接在网页上进行使用 WASM/JS 围绕“原子接口”进行开发。

    比如说摄像头模块的原子接口,可以做到对相机预览功能的二次开发,或者直接拿到 YUV、RGB、RAW 等格式进行处理等等。但现实情况是,每一个物理硬件都有它的特性,我们只能说这些硬件在出厂的时候通过了可用性的测试,但并无法保证所有的硬件都是一致的,所以我们往往需要加入一个理想数据模型,来结合实际硬件的情况,加入一定的偏移与噪点来消除误差,这其实是需要硬件厂商和系统驱动要去解决的问题。

  2. 其次“应用接口”是基于“原子接口”开发出来的应用。首先操作系统会提供一套默认的“应用接口”,正因为将浏览器的开发成本嫁接到操作系统上,并将之模块化,才有可能将浏览器的开发成本大大降低。

    同时第三方开发者通用也可以在“原子接口”确保安全性与隐私性的基础上使用原生的指令集进行二次开发,这种第三方开发的原生应用,可以上架到应用市场。正如我们可以去设置mailto:邮件协议的处理程序一样。

    虽然是原生开发,但是并不代表可以绕过“原子接口”去直接使用更加底层的操作系统接口,毕竟是 Web 技术,一定要确保隐私性与安全性。

    但是在应用市场上,会有明确需要通过功能测试与基准测试才能正式上架,在下载的时候,用户也可以看到测试的分数,在功能性与性能之间做出选择。同时也正式因为只能基于“原子接口”,牺牲少量性能换来了更高的安全性,用户不用担心使用第三方摄像头功能模块的时候,数据会被悄悄泄露上传到别的地方去。

  3. 对于 Web 开发者如何使用这些功能模块呢?
    1. 一般情况下会直接使用“应用接口”。大部分接口使用时都需要经过授权;部分接口会有明确的状态信息限制;也会有接口调用日志。
    2. 但是开发者无法拿到接口开发商的信息,因为这些信息很有可能被当作指纹来识别。

第二种是浏览器内核

它是一个综合性的模块,也是开发难度最大的模块,它的作用就是定义 Web 技术最基础的输入与输出。

  1. 对于输入,就是要将键盘、鼠标、触摸、陀螺仪、摄影、声音、环境亮度等输入信号抽象定义。

    1. 开发者无法拿到这些信号的源头(比如键盘的型号、鼠标的型号等等),只能拿到这些输入的值,比如用户点击了屏幕上的哪里,使用手点击的还是鼠标点击的,点击的力度是多大等等,这种是数值。
    2. 有时候这些值还会在精度允许的范围内做一定的模糊,特别是跟现实有关的值,不允许过高的精度(如果需要也需要通过用户允许),以防止有站点采集这些信息作为指纹识别。

      比如说我们可以使用陀螺仪,实现对心跳频率的识别,识别出你是年轻人还是老人,从而做出差异化体验,这种模糊识别是允许的。

      但是要知道,每个人心跳就跟指纹一样,都会有细微的差别,如果陀螺仪的精度过高,那么在 AI 技术的加持下,很有可能就能更进一步精确识别出个体。
      如果这种机制存在,黑客或者一些大型企业就能通过一些手段,在很多网页上注入它们的监控算法,将这些信息收集,只要收集的时间够长,这时候你的个人隐私就与裸奔无异了。你的生活里的信息很可能会被人引导、控制、甚至攻击。

  2. 对于输出,就是要将画面,音频、震动等信息的输出方式进行封装。

    1. 其中最难的就是“画面”的输出了,虽然我对计算机图形编程并没有多少研究,但是对于 Web 渲染我有一定的使用心得。

    2. 请我允许我偏执地认为,HTML+CSS 的绘制,曾经是一种很棒的标准,它除了绘制的功能,还提供了屏幕可读的功能,这对于对于视力障碍人群是很友好的。

    3. 但现在我并不在觉得它是优秀的设计,Web2.0 蓬勃发展,已经加入了太多太多功能,因为其过去的封闭性,所以标准制定者需要对这些标准的兼容性负责,所以它们现在实在过于膨胀。

    4. 好在现在有人在开放性上一直做出努力:

      1. WebComponent 在一定程度上已经能满足大部分场景,新的提案也一直在推进。
      2. 而 CSS Houdini 的发展则有些迟缓,但我相信它正在以正确的方式在解决问题,它的野心很大,需要开放“解析”、“布局”、“绘制”、“合成”的过程,所以难度自然更大。

        相信未来新的 CSS、HTML 标准应该只能属于“功能性模块“而不是“浏览器内核”。

      软件的高内聚与硬件的高内聚并不一样,硬件是会有损耗的,所以当我们更新硬件时,拿到的就是一个全新的设备。
      而软件的问题,则是会跟着历史的进程去向下兼容下去。如果软件保持高内聚而不开放,这就会导致软件的功能会越来越臃肿。相反的如果使用开放的架构,我们可以明确地定义新的标准,果断地遗弃过去的功能,对于兼容性,就直接由过去的功能模块来做就好。新的标准可以更加专注于小范围领域内的逻辑自洽的设计就好了,这也能使之拥有更高的性能,同时也拥有更少的成本。

    5. 未来,HTML 会专注于表单、结构化、屏幕可读性,这可以让人们基本没有 CSS 的辅助,也能基于这些文本与超文本标记语言,理解到网页的大体内容。

    6. 而 CSS,则是会更进一步融合 canvas-2d/webgl/webgpu 等绘制功能来提供更棒的视觉体验。

    7. 信息的输入,则是会围绕 HTML 来展开捕获,而后将之传递给 CSS。

总结

综合以上关于技术的几点构想,假如真的成立,那么未来浏览器与 Web 技术的发展会有这几种趋势特征:

  1. 开发一个浏览器的成本会越来越低。低到一个人也能通过整个开源社区来独立实现一个比较高效的 Web 浏览器。
  2. 性能与原生差距很低。基于浏览器的二次开发会称为原生软件的开发标准,比如可以替换“功能性模块”来实现更进一步的性能与体验的升级。
  3. 浏览器会更加省电。
    1. 这也是因为浏览器的模块协同机制的改变,操作系统可以更加精细地调控对各个模块电源的使用来进一步省电,比如降低触摸与鼠标的输入频率。
    2. Web 技术的历史包袱会更小,对于过时的技术,本身就是存在过过去的硬件性能水平下,那么对于当下的硬件水平,我们可以只提供更少的资源,在确保功能正常的情况下同时省电。
  4. 向兼容性不再是困扰开发者的事情。
    1. 一方面是浏览器架构的升级,升级核心组件会变得更加简单;
    2. 另一方开发者可以更加激进地不去考虑兼容性的问题,想要使用新的技术,只需要操作系统后台去安装这些模块即可。
  5. 用户会有更多的选择权与话语权。体现在用户可以更加轻松地杜绝个人信息盗取,这也会为整个互联网的发展带来更加良性的循环,而不是靠着贩卖用户信息牟利。